﻿using System;
using Anagramme.Contracts;
namespace Anagramme.Model
{
    /// <summary>
    /// Contrat pour un modèle de jeu
    /// </summary>
    public interface IGameModel : IGameService, IService
    {
        /// <summary>
        /// Se produit lors de la récupération des informations sur l'équipe Bleue
        /// </summary>
        event EventHandler<EventArgs<Team>> OnResponseGameBlueTeamInfos;

        /// <summary>
        /// Se produit lorsque le serveur à été arrêté
        /// </summary>
        event EventHandler<EventArgs> OnResponseGameDisconnect;

        /// <summary>
        /// Se produit lors de la fin du jeu
        /// </summary>
        event EventHandler<EventArgs> OnResponseGameFinished;

        /// <summary>
        /// Se produit lors de la modification du score d'une équipe
        /// </summary>
        event EventHandler<EventArgs<int, int>> OnResponseGameIncreaseTeamScore;

        /// <summary>
        /// Se produit lors de la récupération des informations de la partie
        /// </summary>
        event EventHandler<EventArgs<Anagramme.Contracts.GameInfo>> OnResponseGameInfos;

        /// <summary>
        /// Se produit lorsqu'un joueur quitte la partie
        /// </summary>
        event EventHandler<EventArgs<int>> OnResponseGamePlayerLeave;

        /// <summary>
        /// Se produit lors de la récupération des informations du round courant
        /// </summary>
        event EventHandler<EventArgs<Anagramme.Contracts.RoundInfo>> OnResponseGameNewRound;

        /// <summary>
        /// Se produit lors de la récupération des informations sur l'équipe Rouge
        /// </summary>
        event EventHandler<EventArgs<Team>> OnResponseGameRedTeamInfos;

        /// <summary>
        /// Se produit lors de la fin du round
        /// </summary>
        event EventHandler OnResponseGameRoundFinished;

        /// <summary>
        /// Se produit lorsqu'un mot à été découvert par l'adversaire
        /// </summary>
        event EventHandler<EventArgs<int>> OnResponseGameWordFound;

        /// <summary>
        /// Se produit lors de la réponse à la soumission d'un mot
        /// </summary>
        event EventHandler<EventArgs<int, bool>> OnResponseGameWordSubmit;
    }
}
